<?php

use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;

/**
 * @param string $key
 * @param mixed $default
 * @return mixed
 */
if (!function_exists('env')) {
    function env($key, $default = null)
    {

        $value = getenv($key) ?? $_ENV[$key] ?? $_SERVER[$key];

        if ($value === false) {
            return $default;
        }

        switch (strtolower($value)) {
            case 'true':
            case '(true)':
                return true;

            case 'false':
            case '(false)':
                return false;
        }

        return $value;
    }
}

/**
 * 格式化打印
 * @param $arr
 * @param int $mark
 */
if (!function_exists('p')) {
    function p($arr, $mark=1){
        echo "<pre>";
        print_r($arr);
        echo "</pre>";
        if($mark != 2){
            exit;
        }
    }
}

/*
 * curl获取数据
 * @param  string   $url 地址
 * @param  boolean  $post 是否post请求
 * @param  array    $post_data   post提交数据
 * return  json     $data 请求结果
 * @author zxl
 */
if (!function_exists('curlGetContentByUrl')) {
    function curlGetContentByUrl($url, $post = false, $post_data = [])
    {
        $curl = curl_init();
        if($post){
            //设置post方式提交
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
            //json格式
            if(!is_array($post_data)){
                curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                        'Content-Type: application/json',
                        'Content-Length: ' . strlen($post_data))
                );
            }
        }
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);//1返回response头部信息
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        //url重定向
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        $data = curl_exec($curl);
        curl_close($curl);
        return $data;
    }
}

/*
 * 谷歌驱动方式获取数据
 * @param string $url
 */
 function getConByChromeDriver($url){
    set_time_limit(0);
    $host = 'http://localhost:4444/wd/hub'; // this is the default
    $cap = DesiredCapabilities::chrome();
    $cap->setCapability('chromeOptions', ['args' => ["--headless", "--disable-gpu", "--disable-extensions"]]);
    //$host = 'http://localhost:9515';
    $driver = RemoteWebDriver::create($host, $cap);
    $driver->get($url);
    $src = $driver->getPageSource();
    $driver->quit();
    return $src;
}

/*
 * 二维码添加到图片
 * @qrcode_url 二维码链接
 * @$qrcode_dir 二维码要保存的目录
 * @$img_path 图片地址
 * @author zxl
 */
function addQrcodeToImg($qrcode_url, $qrcode_dir, $img_path){
    $qrcode_path = generateQrcode($qrcode_url, $qrcode_dir);
    //创建图片的实例
    $dst = imagecreatefromstring(file_get_contents($img_path));
    $src = imagecreatefromstring(file_get_contents($qrcode_path));
    //获取二维码图片的宽高
    list($src_w, $src_h) = getimagesize($qrcode_path);
    unlink($qrcode_path);//删除二维码
    //将二维码图片复制到目标图片上，最后个参数50是设置透明度，这里实现半透明效果
    imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 100);
    //输出图片
    list($dst_w, $dst_h, $dst_type) = getimagesize($img_path);//echo $dst_path;exit;
    switch ($dst_type) {
        case 1://GIF
            header('Content-Type: image/gif');
            imagegif($dst, $img_path);
            break;
        case 2://JPG
            header('Content-Type: image/jpeg');
            imagejpeg($dst, $img_path);//第二个参数为二维码保存地址
            break;
        case 3://PNG
            header('Content-Type: image/png');
            imagepng($dst, $img_path);
            break;
        default:
            break;
    }
    imagedestroy($dst);
    imagedestroy($src);
}

/*
 * 生成二维码
 * @param string $url 二维码url
 * @param string $qrcode_dir 二维码要保存的目录
 * @return string
 * @author zxl
 */
function generateQrcode($url, $qrcode_dir){

    $qrCode = new \Endroid\QrCode\QrCode($url);
    header('Content-Type: '.$qrCode->getContentType());
    $errorCorrentionLevel = 'low'; //容错级别
    $qrCode->setErrorCorrectionLevel($errorCorrentionLevel);
    $qrCode->setSize(100);//设置大小
    if(!is_dir($qrcode_dir)){
        @mkdir($qrcode_dir, 0777);
    }
    $path =$qrcode_dir . '/'.rand(1,99999999).time().'.png';
    $qrCode->writeFile($path);
    return $path;
}

/*
 * 下载图片
 * @param string $online_img 在线图片地址
 * @param $img_dir 图片保存目录
 * return $img_url 下载到本地的图片地址
 */
function downloadImage($online_img, $img_dir, $base64 = false){
    //如果是base64，则$online_img为二进制字符串，不再是图片地址。
    $imgType = ['jpg', 'jpeg', 'png', 'gif'];
    if(!is_dir($img_dir)){
        @mkdir($img_dir, 0777);
    }
    header('Content-Type: image/jpeg');
    $ext = pathinfo($online_img,PATHINFO_EXTENSION );
    $ext = $ext && in_array(strtolower($ext), $imgType) ? $ext : 'jpg';
    $imgName = 'img_'.time().'.'.$ext;
    $img_url = $img_dir . '/' . $imgName;
    $fp2=fopen($img_url,"a");
    $content = $base64 ? base64_decode($online_img) : file_get_contents($online_img);
    //$content = $base64 ? base64_decode(file_get_contents($online_img)) : file_get_contents($online_img);
    file_put_contents($img_url , $content);
    if($base64){
        img_create_small($img_url, $width = 80, $height = 80, $small_img = $img_dir.'/img_'.time().'_m.'.$ext);
    }
    return $img_url;
}

/*
 * 生成缩略图
 * @param string $big_img 原始大图地址
 * @param $width 缩略图宽度
 * @param $height 缩略图高度
 * @param $small_img 缩略图地址
 * return $small_img
 */

function img_create_small($big_img, $width, $height, $small_img) {
    $imgage = getimagesize($big_img); //得到原始大图片
    switch ($imgage[2]) { // 图像类型判断
        case 1:
            $im = imagecreatefromgif($big_img);
            break;
        case 2:
            $im = imagecreatefromjpeg($big_img);
            break;
        case 3:
            $im = imagecreatefrompng($big_img);
            break;
    }
    $src_W = $imgage[0]; //获取大图片宽度
    $src_H = $imgage[1]; //获取大图片高度
    $tn = imagecreatetruecolor($width, $height); //创建缩略图
    imagecopyresampled($tn, $im, 0, 0, 0, 0, $width, $height, $src_W, $src_H); //复制图像并改变大小
    imagejpeg($tn, $small_img); //输出图像
    return $small_img;
}

/*
 * 下载pdf、doc等文件到本地
 * @param string $docNetUrl网络地址
 * @param string $file_dir 文件保存目录
 * return string $file_url 下载到本地的文件地址
 * @author zxl
*/
function downloadFile($docNetUrl, $file_dir){
    $docNetUrl = strpos($docNetUrl, 'https:') === false ? 'https:'.$docNetUrl : $docNetUrl;
    $content = curlGetContentByUrl($docNetUrl);
    if(!is_dir($file_dir)){
        @mkdir($file_dir,0777);
    }
    $ext = pathinfo($docNetUrl,PATHINFO_EXTENSION );//p($matches);
    $fileName = date('YmdHis').'.'.$ext;
    $file_url = $file_dir . '/' . $fileName;
    $fp2=fopen($file_url,"a");
    file_put_contents($file_url , $content);
    return $file_url;
}

/*
 *图像文字提取
 * @$img_path   string 图片地址
 * @$aipConfig  array  aip配置参数
 */
function AipOcr($img_path, $aipConfig = []){
    $client = new \AipOcr($aipConfig['APP_ID'], $aipConfig['API_KEY'], $aipConfig['SECRET_KEY']);
    $image = file_get_contents($img_path);
// 调用通用文字识别, 图片参数为本地图片
    $client->basicGeneral($image);
// 如果有可选参数
    $options = array();
    $options["language_type"] = "CHN_ENG";
    $options["detect_direction"] = "true";
    $options["detect_language"] = "true";
    //$options["probability"] = "true";
// 带参数调用通用文字识别, 图片参数为本地图片
    $res = $client->basicGeneral($image, $options);
    $str = '';
    if($words = $res['words_result']){
        $data = array_column($words, 'words');
        $str = implode(',', $data);
    }
    return $str ? $str : false;
}

/*
 * 生成html
 * @param string $html_dir
 * @param string $html_name
 * @param array $data
 * return $file_url
 */
function createHtml($html_dir, $html_name, $data){
    $cur_tmp_dir = $html_dir . '/' . md5($html_name);
    if(!is_dir($cur_tmp_dir)){
        @mkdir($cur_tmp_dir, 0777);
    }
    $file_url = $cur_tmp_dir.'/'.$html_name;
    fopen($file_url,"a");
    $html = "<html lang=\"zh-cn\">
                    <head>
                        <meta charset=\"utf-8\"/>
                        <title>{$data['title']}</title>
                    </head>
                    <body>
                        {$data['content']}
                    </body>
                </html>";

    file_put_contents($file_url , $html);
    return $file_url;
}
